package vsy.buzzwordbingo.model;

import java.util.Date;
import java.util.List;

public interface Game {
	
	/**
	 * The method returns the individual Id of the this Game object as String.
	 * */
	public String getId();

	/**
	 * The method returns the title of this Game object as String.<br>
	 * The title of a Game object is not unique, so several games<br>
	 * may have the same title.
	 * @return <b>String</b> - a String representing the title of the game
	 * */
	public String getTitle();
	
	/**
	 * The method returns an int value representing the size of the game.
	 * The size is the amount of rows/columns of the squarish board.
	 * @return <b>int</b> - size of the game
	 * */
	public int getSize();
	
	/**
	 *
	 * */
	public String getDescription();
	
	/**
	 * The method returns the Player object of the owner of this game.<br>
	 * The owner is the Player who created this game.
	 * */
	public Player getOwner();
	
	/**
	 *
	 * */
	public List<String> getBuzzwords();
	
	/**
	 * The method returns a generic java.util.List of all Players in this game.<br>
	 * */
	public List<Player> getPlayers();
	
	/**
	 *The method returns a generic java.util.List of all GameBoards.<br>
	 * */
	public List<GameBoard> getBoards();
	
	/**
	 * The method joins a Player to this game and returns.<br>
	 * During this method it will be checked if the player<br>
	 * had joined this game before. If the player did not<br>
	 * had joined the game before, a new gameboard will be<br>
	 * created. The gameboard of this player will be returned.<br>
	 * @param player - the Player object of the player which joins this game
	 * @return <b>GameBoard</b> - returns the specific gameboard of the player
	 * for this game
	 * */
	public GameBoard joinGame(Player player);
	
	/**
	 *	The method removes the player off the game.<br>
	 *	The gameboard of the player will not be deleted,<br>
	 *	so he could join this game again.
	 * */
	public void leaveGame(Player player);
	
	/**
	 * The method removes the player of this game<br>
	 * and deletes its gameboard and unloads all<br>
	 * references to this game.
	 * */
	public GameBoard kick(Player player);
	
	/**
	 * The method returns the winner of the game,<br>
	 * if the game has already been finished.
	 * @return Player - the Player object of the winner
	 * */
	public Player getWinner();
	
	/**
	 *
	 * */
	public long getLastModificationTime();
	
	/**
	 *
	 * */
	public long updateLastModificationTime();
	
	/**
	 *
	 * */
	public long getCreationTime();
	
	/**
	 * This method is not in use.
	 * */
	public Date getCreationTimeDate();
}
